package cn.edu.nwpu.warehousemanagement.service;

import cn.edu.nwpu.warehousemanagement.constantEnum.OperationType;
import cn.edu.nwpu.warehousemanagement.pojo.Freight;
import cn.edu.nwpu.warehousemanagement.pojo.InventoryRecord;
import cn.edu.nwpu.warehousemanagement.pojo.Result;
import cn.edu.nwpu.warehousemanagement.pojo.dto.PageDTO;
import org.springframework.data.domain.Page;

import java.util.List;

/**
 * 库存记录服务接口
 * @author LSR
 */
public interface InventoryRecordService {
    /**
     * 分页查询未删除的库存记录
     * @param pageDTO 分页参数
     * @return 分页结果（仅包含未删除记录）
     */
    Result<Page<InventoryRecord>> getInventoryRecordsByPage(PageDTO pageDTO);

    Result<Page<InventoryRecord>> getInboundInventoryRecordsByPage(PageDTO pageDTO);

    Result<Page<InventoryRecord>> getOutboundInventoryRecordsByPage(PageDTO pageDTO);


    /**
     * 根据ID查询未删除的库存记录
     * @param id 记录ID
     * @return 库存记录（仅返回未删除记录）
     */
    Result<InventoryRecord> getInventoryRecordById(Long id);

    /**
     * 根据货物ID获取批次号
     * @param freightId 货物ID
     * @return 批次号
     */
    Result<String> getBatchIdByFreightId(Long freightId);

    /**
     * 软删除库存记录（设置deleted=true）
     * @param id 记录ID
     * @return 操作结果
     */
    Result<InventoryRecord> deleteInventoryRecord(Long id);

    /**
     * 根据批次ID获取关联的货物列表
     * @param batchId 批次ID
     * @return 货物列表
     */
    Result<List<Freight>> getFreightsByBatchId(String batchId);


    /**
     * 通过批次ID获取库存记录
     * @param batchId 批次ID
     * @return 库存记录
     */
    Result<InventoryRecord> getInventoryRecordByBatchId(String batchId);

    /**
     * 根据商品名称和操作类型分页查询库存记录
     * @param productName 商品名称(模糊匹配)
     * @param operationType 操作类型(INBOUND/OUTBOUND) 可选
     * @param pageDTO 分页参数
     * @return 分页结果
     */
    Result<Page<InventoryRecord>> getInventoryRecordsByProductName(
            String productName,
            OperationType operationType,  // 新增操作类型参数
            PageDTO pageDTO
    );
}